package br.com.mwinehouse.primeiraLetra;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Random;
import java.util.Set;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

/**
 * Activity Principal 
 */
public class PrimeiraLetra extends Activity {
	
	ImageView imagemLetra = null;
	int posicao = 0; //posicao utilizada em arrays 
	ImageView imagem01 = null;
	ImageView imagem02 = null;
	ImageView imagem03 = null;
	ImageView imagem04 = null;
	ImageView imagem05 = null;
	Set<Integer> setImagens = new HashSet<Integer>(5); //Colecai de posicoes dinamicas
	Random random = new Random(); 
	final int totalLetras = 23; //total de letras no alfabeto
	
	@SuppressLint("UseSparseArrays")
	Map<Integer, Integer> mapImagensPosicoes = 
			new HashMap<Integer, Integer>(); //guarda a imagem e sua posicao 
	
	/**
	 * Clique nas imagens
	 */
	OnClickListener listenerImagens = new View.OnClickListener() {
		
		@Override
		public void onClick(View view) {
			
			//recupera a posicao da imagem selecionada
			int posicaoSelecionada = mapImagensPosicoes.get(view.getId());
			
			if(posicaoSelecionada == posicao){
				openDialogCerto();
			}
			else{
				openDialogErrado();
			}
			
		}
	};
	
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        //atualiza a tela
        atualizarTela();
        
    }

	/**
     * Gera uma imagem a ser exibida para o usuatio
     * @return o id da letra
     */
	private int getImagemLetra() {
		posicao = random.nextInt(totalLetras);
		return AppConstantes.ALPHABET[posicao];
	}
	
	/**
	 * Atualiza a tela
	 */
	private void atualizarTela() {
		
		//atualiza a letra
		atualizarLetra();
        
		//atualiza as imagens
        atualizarImagens();
	}
	
	/**
	 * Atualiza a letra
	 */
	private void atualizarLetra() {
		
        int valorLetra = this.getImagemLetra(); 
        imagemLetra = (ImageView) findViewById(R.id.imagemLetra);
        imagemLetra.setImageResource(valorLetra);
	}

	/**
	 * Atualiza as imagens
	 */
	private void atualizarImagens() {
		
		//Collection com os elementos
        setImagens.clear();
        setImagens.add(posicao);
        while(setImagens.size() < 5){
        	setImagens.add(random.nextInt(totalLetras));
        }
        
        //array com as posicoes
        Object[] positions = setImagens.toArray();
        
        //Define as imagens, eventos e valores
        //image 01
        imagem01 = (ImageView) findViewById(R.id.imagem01);
        imagem01.setImageResource(AppConstantes.OBJECTS[(Integer) positions[0]]);
        imagem01.setOnClickListener(listenerImagens);
        mapImagensPosicoes.put(R.id.imagem01, (Integer) positions[0]);
        
        //image 02
        imagem02 = (ImageView) findViewById(R.id.imagem02);
        imagem02.setImageResource(AppConstantes.OBJECTS[(Integer) positions[1]]);
        imagem02.setOnClickListener(listenerImagens);
        mapImagensPosicoes.put(R.id.imagem02, (Integer) positions[1]);
        
        //image 03
        imagem03 = (ImageView) findViewById(R.id.imagem03);
        imagem03.setImageResource(AppConstantes.OBJECTS[(Integer) positions[2]]);
        imagem03.setOnClickListener(listenerImagens);
        mapImagensPosicoes.put(R.id.imagem03, (Integer) positions[2]);
        
        //image 04 
        imagem04 = (ImageView) findViewById(R.id.imagem04);
        imagem04.setImageResource(AppConstantes.OBJECTS[(Integer) positions[3]]);
        imagem04.setOnClickListener(listenerImagens);
        mapImagensPosicoes.put(R.id.imagem04, (Integer) positions[3]);
        
        //image 05
        imagem05 = (ImageView) findViewById(R.id.imagem05);
        imagem05.setImageResource(AppConstantes.OBJECTS[(Integer) positions[4]]);
        imagem05.setOnClickListener(listenerImagens);
        mapImagensPosicoes.put(R.id.imagem05, (Integer) positions[4]);
	}

	protected void openDialogCerto() {
		
		openDialog(R.string.titulo_certo, R.drawable.certo);
		
	}
	
	protected void openDialogErrado() {
		
		openDialog(R.string.titulo_errado, R.drawable.errado);
		
	}

	/**
	 * Exibe um dialgo customizado
	 */
	private void openDialog(int idTitulo, int idImagem) {
		
		final Dialog dialog = new Dialog(this);
		dialog.setTitle(idTitulo);
		dialog.setContentView(R.layout.custom_dialog);
		
		ImageView image = (ImageView) dialog.findViewById(R.id.image);
		image.setImageResource(idImagem);
		
		Button button = (Button) dialog.findViewById(R.id.ok);
		button.setText("===========>");
		button.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				dialog.dismiss();
				atualizarTela();
			}
		});
				
		dialog.setCancelable(true);
		dialog.show();
	}
	
}